package com.springcloud.sc.ucpv5.client.application.util;

/**
 * 由于JAVA里面没有无符号数这一概念，当需要用一个数类型<BR>
 * 所占用的字节来表示该类型的某最值时，往往为一负数（如数<BR>
 * 32767为短整型，存储值实际上为-1）。本类即为解决该问<BR>
 * 题而设计，目的是要让无符号数正确在内存中进行存储。
 * 
 * 
 */
public final class UnsignedNumberConvert {
	// 获取无符号byte类型数的字节表示方式
	public static byte getSignedByteInBytes(int number) {
		if (number > 127)
			return (byte) (number - 256);
		else
			return (byte) number;
	}

	// 获取无符号short类型数的字节表示方式
	public static short getSignedShortInBytes(int number) {
		if (number > 32767)
			return (short) (number - 65536);
		else
			return (short) number;
	}

	// 获取无符号int类型数的无符号字节表示方式
	public static int getSignedIntegerInBytes(long number) {
		if (number > 2147483647)
			return (int) (number - 4294967296L);
		else
			return (int) number;
	}

	// ////////////////////////////////////////

	// 获取1个字节直转的byte型值的无符号byte类型表示方式
	public static int getUnsignedByteInBytes(byte number) {
		int num = number;
		if (num < 0) {
			num += 256;
		}
		return num;
	}

	// 获取2个字节直转的short型值的无符号short类型表示方式
	public static int getUnsignedShortInBytes(short number) {
		int num = number;
		if (num < 0) {
			num += 65536;
		}
		return num;
	}

	// 获取4个字节直转的int型值的无符号int类型表示方式
	public static long getUnsignedIntegerInBytes(int number) {
		long num = number;
		if (num < 0) {
			num += 4294967296L;
		}
		return num;
	}

}
